<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="Content-Language" content="zh-CN"><title>systemd-notify
  中文手册 [金步国]</title><style>
@font-face { font-family: "JinBuGuoWebMono"; src: url("http://www.jinbuguo.com/d/mono.ttf") format("truetype"); }
* { font-family: "JinBuGuoWebMono", "Ubuntu Mono", "Consolas", "Menlo", monospace; }
body { margin:10px; }
h1 { text-align:center; background:#ddd; }
h2#auth_name { text-align:center; margin: 10px 5%; }

    a.headerlink {
      color: #c60f0f;
      font-size: 0.8em;
      padding: 0 4px 0 4px;
      text-decoration: none;
      visibility: hidden;
    }

    a.headerlink:hover {
      background-color: #c60f0f;
      color: white;
    }

    h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
      visibility: visible;
    }
</style><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><h1>systemd-notify 中文手册</h1><h2 id="auth_name">译者：<strong><a href="http://www.jinbuguo.com/">金步国</a></strong></h2><hr><h3>版权声明</h3><p>本文译者是一位开源理念的坚定支持者，所以本文虽然不是软件，但是遵照开源的精神发布。</p><ul><li>无担保：本文译者不保证译文内容准确无误，亦不承担任何由于使用此文档所导致的损失。</li><li>自由使用：任何人都可以自由的<u>阅读/链接/打印</u>此文档，无需任何附加条件。</li><li>名誉权：任何人都可以自由的<u>转载/引用/再创作</u>此文档，但必须保留译者署名并注明出处。</li></ul><h3>其他作品</h3><p>本文译者十分愿意与他人分享劳动成果，如果你对我的其他翻译作品或者技术文章有兴趣，可以在如下位置查看现有的作品集：</p><ul><li><a href="http://www.jinbuguo.com/">金步国作品集</a> [ <a href="http://www.jinbuguo.com/">http://www.jinbuguo.com/</a> ]</li></ul><h3>联系方式</h3><p>由于译者水平有限，因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好)，请来信指出，任何提高译文质量的建议我都将虚心接纳。</p><ul><li>Email(QQ)：70171448在QQ邮箱</li></ul><hr><a href="systemd.index.html">手册索引</a> ·
  <a href="systemd.directives.html">指令索引</a><span style="float:right">systemd-241</span><hr><div class="refentry"><a name="systemd-notify"></a><div class="titlepage"></div><div class="refnamediv"><h2>名称</h2><p>systemd-notify — 向 systemd 报告服务状态的变化</p></div><div class="refsynopsisdiv"><h2>大纲</h2><div class="cmdsynopsis"><p><code class="command">systemd-notify [OPTIONS...]  [VARIABLE=VALUE...]</code> </p></div></div><div class="refsect1"><a name="id-1.5"></a><h2 id="描述">描述<a class="headerlink" title="Permalink to this headline" href="systemd-notify.html#%E6%8F%8F%E8%BF%B0">¶</a></h2><p><span class="command"><strong>systemd-notify</strong></span> 可用于
    在守护进程脚本中向 systemd 报告进程状态的变化。
    可用于发送任意信息，
    其中最重要的是
    报告"启动已完成"的消息。</p><p>此工具基本上就是对
    <code class="function">sd_notify()</code> 的简单包装，
    以便于在脚本中使用。详见
    <a href="http://www.jinbuguo.com/systemd/sd_notify.html#"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a> 手册。
    </p><p>注意，在报告状态更新的同时，
    还可以传递一系列环境变量。</p><p>注意，在默认情况下(也就是调用此命令的服务单元含有 <code class="varname">NotifyAccess=none</code>)，
     systemd 并不从此命令接受状态更新消息。</p><p>注意，服务单元的 <code class="function">sd_notify()</code> 通知能够正常工作的前提，
    是必须满足如下两个条件之一：
    (1)在 PID=1 的进程处理通知消息时，发送该通知的进程依然在运行；
    (2)发送该通知的进程是 systemd 派生的子进程(也就是匹配 <code class="varname">NotifyAccess=main</code> 或 <code class="varname">NotifyAccess=exec</code> 的进程)。
    如果服务单元中的某个辅助进程在发送了 <code class="function">sd_notify()</code> 通知之后就立即退出了，
    那么 systemd 将有可能来不及将该通知关联到这个服务单元上。
    在这种情况下，即使明确设置了 <code class="varname">NotifyAccess=all</code> ，
    该通知也可能会被忽略掉。</p><p><span class="command"><strong>systemd-notify</strong></span> 会首先尝试以调用进程的PID来调用 <code class="function">sd_notify()</code> (此操作仅在确实拥有足够权限的情况下才会成功)，
    如果失败，将会使用其自身的PID再次调用 <code class="function">sd_notify()</code> 。
    这种做法对于从 shell 脚本中调用 <span class="command"><strong>systemd-notify</strong></span> 命令非常有用，
    特别是当服务的主进程是 shell 的时候(由于 <code class="varname">NotifyAccess=all</code> 的限制)，
    因为在这种情况下，
    shell 进程(而不是 <span class="command"><strong>systemd-notify</strong></span> 进程)将成为消息的发送者。</p></div><div class="refsect1"><a name="id-1.6"></a><h2 id="选项">选项<a class="headerlink" title="Permalink to this headline" href="systemd-notify.html#%E9%80%89%E9%A1%B9">¶</a></h2><p>能够识别的命令行选项如下：</p><div class="variablelist"><dl class="variablelist"><dt id="--ready"><span class="term"><code class="option">--ready</code></span><a class="headerlink" title="Permalink to this term" href="systemd-notify.html#--ready">¶</a></dt><dd><p>向 systemd 报告"启动已完成"的消息。
        这等价于 <span class="command"><strong>systemd-notify
        READY=1</strong></span> 。
        详见
        <a href="http://www.jinbuguo.com/systemd/sd_notify.html#"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a> 手册。</p></dd><dt id="--pid="><span class="term"><code class="option">--pid=</code></span><a class="headerlink" title="Permalink to this term" href="systemd-notify.html#--pid=">¶</a></dt><dd><p>向 systemd 报告主守护进程的 PID 。
        如果 PID 参数被省略，
        将使用调用
        <span class="command"><strong>systemd-notify</strong></span> 的进程的 PID 。
        这等价于 <span class="command"><strong>systemd-notify MAINPID=$PID</strong></span> 。
        详见
        <a href="http://www.jinbuguo.com/systemd/sd_notify.html#"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a> 手册。</p></dd><dt id="--uid=USER"><span class="term"><code class="option">--uid=</code><em class="replaceable"><code>USER</code></em></span><a class="headerlink" title="Permalink to this term" href="systemd-notify.html#--uid=USER">¶</a></dt><dd><p>向 systemd 报告此消息来自哪个用户，也就是使用指定的
         <em class="replaceable"><code>USER</code></em> 取代调用此命令的用户，作为此通知消息的发送者。
        <em class="replaceable"><code>USER</code></em> 既可以是一个UID数值也可以是一个用户名字符串。
        此选项需要足够的权限才能操作进程的用户标识。</p></dd><dt id="--status="><span class="term"><code class="option">--status=</code></span><a class="headerlink" title="Permalink to this term" href="systemd-notify.html#--status=">¶</a></dt><dd><p>向 systemd 发送一个任意内容的字符串消息。
        这等价于
        <span class="command"><strong>systemd-notify
        STATUS=…</strong></span> 。
        详见
        <a href="http://www.jinbuguo.com/systemd/sd_notify.html#"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a> 手册。</p></dd><dt id="--booted"><span class="term"><code class="option">--booted</code></span><a class="headerlink" title="Permalink to this term" href="systemd-notify.html#--booted">¶</a></dt><dd><p>用于检查系统的 init 进程是否为 systemd ，
        返回 0 表示系统的 init 进程是 systemd ，返回非零表示其他。
        此选项并不发送任何消息，因此与其他选项没有任何关系。
        详见
        <a href="http://www.jinbuguo.com/systemd/sd_booted.html#"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a> 手册。
        另一种检查方法是
        <a href="systemctl.html#"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>
        的 <span class="command"><strong>is-system-running</strong></span> 命令。
        若返回 "<code class="literal">offline</code>" 则表示
        系统的 init 进程不是 systemd </p></dd><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="systemd-notify.html#-h">¶</a></dt><dd><p><a name="help-text"></a>显示简短的帮助信息并退出。
    </p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="systemd-notify.html#--version">¶</a></dt><dd><p><a name="version-text"></a>显示简短的版本信息并退出。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.7"></a><h2 id="退出状态">退出状态<a class="headerlink" title="Permalink to this headline" href="systemd-notify.html#%E9%80%80%E5%87%BA%E7%8A%B6%E6%80%81">¶</a></h2><p>返回值为 0 表示成功，
    非零返回值表示失败代码。</p></div><div class="refsect1"><a name="id-1.8"></a><h2 id="例子">例子<a class="headerlink" title="Permalink to this headline" href="systemd-notify.html#%E4%BE%8B%E5%AD%90">¶</a></h2><div class="example"><a name="id-1.8.2"></a><p class="title"><b>例 1. 启动通知与状态更新</b></p><div class="example-contents"><p>一个简单的守护进程脚本，在创建好通信管道之后，
      向 systemd 报告"启动已完成"的消息。在运行时，
      向 systemd 报告更多的状态消息：</p><pre class="programlisting">#!/bin/bash

mkfifo /tmp/waldo
systemd-notify --ready --status="Waiting for data…"

while : ; do
        read a &lt; /tmp/waldo
        systemd-notify --status="Processing $a"

        # Do something with $a …

        systemd-notify --status="Waiting for data…"
done</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="id-1.9"></a><h2 id="参见">参见<a class="headerlink" title="Permalink to this headline" href="systemd-notify.html#%E5%8F%82%E8%A7%81">¶</a></h2><p>
      <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
      <a href="systemctl.html#"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
      <a href="systemd.unit.html#"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
      <a href="http://www.jinbuguo.com/systemd/sd_notify.html#"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
      <a href="http://www.jinbuguo.com/systemd/sd_booted.html#"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a>
    </p></div></div></body></html>
